#!/bin/bash

# 脚本：替换 gradle.properties 中的 kotlin.native.home 配置
# 用法：./script.sh <新的路径>

set -e  # 遇到任何错误立即退出

# 颜色定义用于输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 打印错误信息并退出
error_exit() {
    echo -e "${RED}错误: $1${NC}" >&2
    exit 1
}

# 打印成功信息
success_msg() {
    echo -e "${GREEN}$1${NC}"
}

# 打印警告信息
warning_msg() {
    echo -e "${YELLOW}$1${NC}"
}

# 检查参数
if [ $# -ne 1 ]; then
    error_exit "请提供 kotlin.native.home 的新路径作为参数\n用法: $0 <新的路径>"
fi

NEW_PATH="$1"
GRADLE_PROPERTIES_FILE="gradle.properties"

# 检查 gradle.properties 文件是否存在
if [ ! -f "$GRADLE_PROPERTIES_FILE" ]; then
    error_exit "找不到 $GRADLE_PROPERTIES_FILE 文件，请在包含该文件的目录中运行此脚本"
fi

# 备份原文件
BACKUP_FILE="${GRADLE_PROPERTIES_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
cp "$GRADLE_PROPERTIES_FILE" "$BACKUP_FILE"
warning_msg "已创建备份文件: $BACKUP_FILE"

# 检测操作系统并执行相应的替换命令
if [[ "$OSTYPE" == "darwin"* ]]; then
    # macOS
    if command -v gsed >/dev/null 2>&1; then
        # 如果有 gsed (GNU sed)，使用它
        SED_CMD="gsed"
    else
        # 使用 macOS 自带的 sed
        SED_CMD="sed"
        # 检查是否支持 -i 选项
        if ! $SED_CMD -i '' 's/test//' "$GRADLE_PROPERTIES_FILE" 2>/dev/null; then
            error_exit "macOS sed 版本不支持原地替换，请安装 GNU sed: brew install gnu-sed"
        fi
    fi
    
    # 执行替换
    if $SED_CMD -i '' "s|^kotlin\.native\.home=.*|kotlin.native.home=${NEW_PATH}|" "$GRADLE_PROPERTIES_FILE"; then
        success_msg "成功替换 kotlin.native.home 为: $NEW_PATH"
    else
        # 恢复备份
        cp "$BACKUP_FILE" "$GRADLE_PROPERTIES_FILE"
        error_exit "替换失败，已恢复原文件"
    fi
else
    # Linux 和其他类 Unix 系统
    if sed -i "s|^kotlin\.native\.home=.*|kotlin.native.home=${NEW_PATH}|" "$GRADLE_PROPERTIES_FILE"; then
        success_msg "成功替换 kotlin.native.home 为: $NEW_PATH"
    else
        # 恢复备份
        cp "$BACKUP_FILE" "$GRADLE_PROPERTIES_FILE"
        error_exit "替换失败，已恢复原文件"
    fi
fi

# 验证替换是否成功
if grep -q "^kotlin\.native\.home=${NEW_PATH}" "$GRADLE_PROPERTIES_FILE"; then
    success_msg "验证成功: kotlin.native.home 已更新为 $NEW_PATH"
else
    warning_msg "警告: 无法验证替换是否完全成功，请手动检查文件内容"
    
    # 显示相关行以供检查
    echo "当前文件中的 kotlin.native.home 配置:"
    grep "kotlin.native.home" "$GRADLE_PROPERTIES_FILE" || warning_msg "未找到 kotlin.native.home 配置"
fi

# 显示替换前后的差异（可选）
echo ""
warning_msg "替换前后的差异:"
if command -v diff >/dev/null 2>&1; then
    diff -u "$BACKUP_FILE" "$GRADLE_PROPERTIES_FILE" | head -20 || true
    rm $BACKUP_FILE
else
    warning_msg "无法显示差异 (diff 命令不可用)"
fi
